/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vng.survey.controller;


import com.vng.zing.survey.thrift.client.SurveyClient;
import com.vng.zing.survey.thrift.model.IDSurveyResult;
import com.vng.zing.survey.thrift.model.QuesType;
import com.vng.zing.survey.thrift.model.Question;
import com.vng.zing.survey.thrift.model.SurveyItem;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import vng.survey.model.CommonModel;

/**
 *
 * @author namhh
 */
public class AjaxAddSurvey extends BaseController {

//    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
//            throws ServletException, IOException, Exception {
//        String out = render(request, response);
//        out(out,response);
//        String error = "";
//        try {
//
//            String myJsonData = request.getParameter("survey");
//            JSONParser parser = new JSONParser();
//            Object obj = parser.parse(myJsonData);
//            JSONObject jsonObject = (JSONObject) obj;
//
//            String title = (String) jsonObject.get("title");
//            if (title == null || "".equals(title)) {
//                error += "Hãy nhập tên khảo sát!\n";
//            }
//            String description = (String) jsonObject.get("description");
//            if (description == null) {
//                error += "Hãy nhập mô tả khảo sát\n";
//            }
//            int createDate = (int) (new Date().getTime() / 1000);
//            Long beginDay = (Long) jsonObject.get("beginDay");
//            if (beginDay + 60 < createDate) {
//                error += "Ngày bắt đầu không hợp lệ!\n";
//            }
//            Long endDay = (Long) jsonObject.get("endDay");
//            if (endDay < beginDay) {
//                error += "Ngày kết thúc không hợp lệ!\n";
//            }
//            String str_point = (String) jsonObject.get("point");
//            short point = 0;
//
//            if (str_point == null || "".equals(str_point)) {
//                error += "Hãy nhập điểm thưởng!\n";
//            } else {
//                point = Short.parseShort(str_point);
//                if (point < 0 || point > 1000) {
//                    error += "Điểm thưởng không hợp lệ!\n";
//                }
//            }
//
//            boolean share = (Boolean) jsonObject.get("share");
//
//            List<Question> questions = new ArrayList<Question>();
//
//            // loop array
//            JSONArray msg = (JSONArray) jsonObject.get("questions");
//            for (Object object : msg) {
//
//                JSONObject jsonQuestion = (JSONObject) object;
//                Long idQues = (Long) jsonQuestion.get("idQues");
//                if (idQues < 0) {
//                    error += "Mã câu hỏi không hợp lệ!\n";
//                }
//
//                String titleQues = (String) jsonQuestion.get("titleQues");
//                if (titleQues == null || "".equals(titleQues)) {
//                    error += "Hãy nhập nội dung câu hỏi!\n";
//                }
//
//                String helpText = (String) jsonQuestion.get("helpText");
//                if (helpText == null) {
//                    error += "Hãy nhập mô tả!\n";
//                }
//
//                String str_require = (String) jsonQuestion.get("require");
//                boolean require = Boolean.parseBoolean(str_require);
//
//
//
//                String type = (String) jsonQuestion.get("type");
//                if (!type.equals(QuesType.SINGLE_SELECTION.name()) && !type.equals(QuesType.MULTI_CHOICE.name()) && !type.equals(QuesType.MULTI_LINE.name()) && !type.equals(QuesType.SINGLE_LINE.name())) {
//                    error += "Kiểu câu hỏi không hợp lệ!\n";
//                }
//                List<String> choices = new ArrayList<String>();
//                if (type.equals(QuesType.SINGLE_SELECTION.name()) || type.equals(QuesType.MULTI_CHOICE.name())) {
//                    JSONArray JSONChoices = (JSONArray) jsonQuestion.get("choices");
//                    if (JSONChoices == null) {
//                        error += "Hãy thêm các lựa chọn!\n";
//                    } else {
//                        Iterator<String> iterator = JSONChoices.iterator();
//                        while (iterator.hasNext()) {
//                            choices.add(iterator.next());
//                        }
//                    }
//                }
//
//
//                Question question = new Question(idQues.shortValue(), titleQues, helpText, require, QuesType.valueOf(type), choices);
//                questions.add(question);
//            }
//            if (questions.size() <= 0) {
//                error += "Không có câu hỏi nào!\n";
//            }
//            if ("".equals(error)) {
//                SurveyItem surveyItem = new SurveyItem(1, title, description, questions, createDate, beginDay.intValue(), endDay.intValue(), point, true, share);
//
//
//
////        SurveyItem surveyItem =(SurveyItem) CommonModel.toOBJECT(myJsonData, SurveyItem.class);
////        surveyItem.setIDUser(1);
////        surveyItem.setCreatedDay((int) new Date().getTime() / 1000);
//                SurveyClient survey = SurveyClient.getInstance();
//                IDSurveyResult id = survey.newSurvey(1, surveyItem);
//                response.setContentType("text/plain");
//                response.setCharacterEncoding("UTF-8");
//                String JSONString = CommonModel.toJSON(id.getError().name(), String.format("%s", id.idSurvey));
//                response.getWriter().print(JSONString);
//            } else {
//
//                String JSONString = CommonModel.toJSON("FAIL", error);
//                response.setContentType("text/plain");
//                response.setCharacterEncoding("UTF-8");
//                response.getWriter().print(JSONString);
//            }
//        } catch (Exception ex) {
//            String JSONString = CommonModel.toJSON("FAIL", error);
//            response.setContentType("text/plain");
//            response.setCharacterEncoding("UTF-8");
//            response.getWriter().print(JSONString);
//        }
//    }
    @Override
    public String render(HttpServletRequest request, HttpServletResponse response) throws IOException, Exception {
        String error = "";
        try {

            String myJsonData = request.getParameter("survey");
            JSONParser parser = new JSONParser();
            Object obj = parser.parse(myJsonData);
            JSONObject jsonObject = (JSONObject) obj;

            String title = (String) jsonObject.get("title");
            if (title == null || "".equals(title)) {
                error += "Hãy nhập tên khảo sát!</br>";
            } else {
                if (title.length() > 200) {
                    error += "Tên khảo sát quá dài!</br>";
                }
            }

            String description = (String) jsonObject.get("description");
            if (description == null) {
                error += "Hãy nhập mô tả khảo sát</br>";
            } else {
                if (description.length() > 500) {
                    error += "Mô tả quá dài!</br>";
                }
            }
            int createDate = (int) (new Date().getTime() / 1000);
            Long beginDay = (Long) jsonObject.get("beginDay");
//            if (beginDay + 60 < createDate) {
//                error += "Ngày bắt đầu không hợp lệ!</br>";
//            }
            Long endDay = (Long) jsonObject.get("endDay");
//          if (endDay < beginDay) {
//                error += "Ngày kết thúc không hợp lệ!</br>";
//            }
            String str_point = (String) jsonObject.get("point");
            short point = 0;

            if (str_point == null || "".equals(str_point)) {
                error += "Hãy nhập điểm thưởng!</br>";
            } else {
                point = Short.parseShort(str_point);
                if (point < 0 || point > 1000) {
                    error += "Điểm thưởng không hợp lệ!</br>";
                }
            }

            boolean share = (Boolean) jsonObject.get("share");

            List<Question> questions = new ArrayList<Question>();

            // loop array
            JSONArray msg = (JSONArray) jsonObject.get("questions");
            for (Object object : msg) {

                JSONObject jsonQuestion = (JSONObject) object;
                Long idQues = (Long) jsonQuestion.get("idQues");
                if (idQues < 0) {
                    error += "Mã câu hỏi không hợp lệ!</br>";
                }

                String titleQues = (String) jsonQuestion.get("titleQues");
                if (titleQues == null || "".equals(titleQues)) {
                    error += "Hãy nhập nội dung câu hỏi!</br>";
                } else {
                    if (titleQues.length() > 200) {
                        error += "Câu hỏi quá dài!</br>";
                    }
                }

                String helpText = (String) jsonQuestion.get("helpText");
                if (helpText == null) {
                    error += "Hãy nhập mô tả!</br>";
                } else {
                    if (helpText.length() > 500) {
                        error += "Mô tả quá dài!</br>";
                    }
                }

                String str_require = (String) jsonQuestion.get("require");
                boolean require = Boolean.parseBoolean(str_require);

                String type = (String) jsonQuestion.get("type");
                if (!type.equals(QuesType.SINGLE_SELECTION.name()) && !type.equals(QuesType.MULTI_CHOICE.name()) && !type.equals(QuesType.MULTI_LINE.name()) && !type.equals(QuesType.SINGLE_LINE.name())) {
                    error += "Kiểu câu hỏi không hợp lệ!</br>";
                }
                List<String> choices = new ArrayList<String>();
                if (type.equals(QuesType.SINGLE_SELECTION.name()) || type.equals(QuesType.MULTI_CHOICE.name())) {
                    JSONArray JSONChoices = (JSONArray) jsonQuestion.get("choices");
                    if (JSONChoices == null) {
                        error += "Hãy thêm các lựa chọn!</br>";
                    } else {
                        Iterator<String> iterator = JSONChoices.iterator();
                        while (iterator.hasNext()) {
                            choices.add(iterator.next());
                        }
                    }
                }

                Question question = new Question(idQues.shortValue(), titleQues, helpText, require, QuesType.valueOf(type), choices);
                questions.add(question);
            }
            if (questions.size() <= 0) {
                error += "Không có câu hỏi nào!</br>";
            }
            if ("".equals(error)) {  SurveyItem surveyItem = new SurveyItem(1, title, description, questions, createDate, beginDay.intValue(), endDay.intValue(), point, true, share);

                SurveyClient survey = SurveyClient.getInstance();
                IDSurveyResult id = survey.newSurvey(1, surveyItem);
                return CommonModel.toJSON(id.getError().name(), String.format("%s", id.idSurvey));
            } else {
                return CommonModel.toJSON("Lỗi hệ thống", error);
            }
        } catch (Exception ex) {
            return CommonModel.toJSON("Lỗi", error);
        }
    }

}
